(() => {
    // 泛型 ：当一个组件需要支持多个类型的数据，而在定义之初，并不明确数据类型
    // 只有在是使用的时候确定，这个时候就需要用到泛型

    // 1.函数类型
    function identity<T>(args: T): T {
        return args
    }
    let a: <T>(args: T) => T = identity
    console.log(a(456));
    console.log(identity(123)); // 类型推断，推断出number类型
    console.log(identity<string>('123')); // 也可以指定类型


    // 2.函数类型
    function showArr<T>(args: Array<T>): Array<T> {
        return [...args]
    }
    let b: <T>(args: Array<T>) => Array<T> = showArr
    console.log(b(['李宗仁','蒋介石']));
    console.log(showArr([1, 2, 3]));


    // 3.数组类型
    interface MyArray<T> {
        [idnex: number]: T
    }
    let myArr: MyArray<string>
    myArr = ['礼拜', '中世纪']
    console.log(myArr);
})()